﻿/********************************************************************************
** @ Date:2025/06/25
** @ Author: Gaojia
** @ Description:
** @ Version:1.0.0
** @ Fun:
********************************************************************************/
#ifndef CBase_H
#define CBase_H
#include <QObject>
#include <QString>
#include <QTreeView>
#include <QStandardItemModel>
#include <QStandardItem>
struct SPageItem
{
	QString sGuid;
	QString sCardGuid;
	int nRow;
	int nCol;
	int nRowSpan;
	int nColSpan;
	SPageItem()
	{

	}
	SPageItem(QString sId, QString sCardId, int Row, int Col, int RowSpan = 1, int ColSpan = 1)
	{
		sGuid = sId;
		sCardGuid = sCardId;
		nRow = Row;
		nCol = Col;
		nColSpan = ColSpan;
		nRowSpan = RowSpan;
	}
};
Q_DECLARE_METATYPE(SPageItem)
Q_DECLARE_METATYPE(QVector<SPageItem>)

class CBase : public QObject
{
	Q_OBJECT
public:
	CBase(QString sName, QObject* parent = nullptr);
	~CBase();
	// 获取节点名称
	QString getName() const { return m_sName; }
	// 获取父节点
	CBase* getParent() const { return m_pParent; }
	// 获取子节点
	QVector<CBase*> getChildren() { return m_pVecChildren; }
	//获取Ui节点
	QStandardItem * getItem() const { return m_pItem; }
	void setName(QString sName) { m_sName = sName; }
	void showItem(QTreeView *pTree);  //展开父节点并滚动到该节点
	// 添加、删除和清空子节点
	void addChild(CBase* child)
	{
		if (!child) return;
		child->m_pParent = this;
		m_pVecChildren.append(child);
		m_pItem->appendRow(child->getItem());
	}
	void removeChild(CBase* child)
	{
		if (!child) return;
		m_pVecChildren.removeOne(child);         // 从子节点列表中移除
		QList<QStandardItem*> taken = m_pItem->takeRow(child->getItem()->row());
	}
	void deleteChild(CBase* child)
	{
		if (!child) return;
		m_pVecChildren.removeOne(child);             // 从子节点列表中移除
		m_pItem->removeRow(child->getItem()->row()); // 从 QStandardItemModel 中移除子节点
		delete child;                                // 删除子节点对象
	}
	void clearChildren()
	{
		for (CBase* child : m_pVecChildren) {
			m_pItem->removeRow(child->getItem()->row());  // 从 QStandardItemModel 中移除
			delete child;   // 删除子节点对象
		}
		m_pVecChildren.clear();  // 清空子节点列表
	}
protected:
	CBase* m_pParent;               // 父节点   
	QVector<CBase*> m_pVecChildren; // 子节点
	QStandardItem* m_pItem;         // 当前树节点对象  
	QString m_sName;                // 节点名称
};

#endif